package com.baidu.proxyDemo;

import java.lang.reflect.Array;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;

public class ProxyUtil {
    public static UserService getRuntime(UserService userService){
        //1.参数1 传入对象的类加载器
        //2.参数2 传入对象实现的接口
        //3.参数3 代理类的方法
        UserService userServiceProxy = (UserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(), userService.getClass().getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        //1.执行代理类的方法
                        System.out.println("============================执行代理类的开始方法============================");

                        long startTime = System.currentTimeMillis();

                        //1.通过传入的method调用invoke方法执行
                        Object invoke = method.invoke(userService, args);
                        System.out.println(method.getName() + "方法传入的参数为" + Arrays.toString(args));

                        long endTime = System.currentTimeMillis();
                        System.out.println(method.getName() + "方法执行时间为" + (endTime - startTime)/1000);

                        System.out.println("============================代理类的结束方法============================");
                        return invoke;
                    }
                });
        return userServiceProxy;
    }

}
